缓冲区溢出攻击过程是什么
缓冲区溢出攻击过程如下:
注入恶意数据:恶意数据是指用于实现攻击的数据,它的内容将影响攻击模式中的后续活动能否顺利进行。恶意数据可以通过命令行参数、环境变量、输入文件或网络数据注入到被攻击系统。
缓冲区溢出:实现缓冲区溢出的前提条件是发现系统中存在的可以被利用的缓冲区溢出漏洞。只有在发现了可被利用的漏洞后,才可以在特定外部输入条件的作用下,迫使缓冲区溢出的发生。
控制流重定向:控制流重定向是将系统从正常的控制流程转向非正常流程的过程,传统做法是通过改写位于堆栈上的函数返回地址来改变指令流程,并借助指令(如NOP指令)提高重定向的成功率。除此之外,还可以通过改写被调用函数栈上保存的调用函数栈的栈地址、改写指针、改写跳转地址等方式实现。
执行攻击程序:当控制流被成功地重定向到攻击程序的位置时,攻击程序得以运行。攻击程序专指真正实现攻击的代码部分,称为有效载荷(payload)。在攻击中,有效载荷可能以可执行的二进制代码形式放置在恶意数据中,这种有效载荷用于产生命令解释器(shellcode)。这是因为,攻击者为达到控制被攻击系统的目的,通常会利用缓冲区漏洞来获得被攻击系统的cmd shell,能为攻击者提供cmd shell的代码被称为Shellcode。此外,有效载荷也可能是已经存在于内存中的代码,相应的攻击技术称为注入攻击。
保护缓冲区免受缓冲区溢出攻击的方法如下:
通过操作系统使得缓冲区不可执行,从而阻止攻击者植入攻击代码。
强制写正确的代码的方法。
利用编译器的边界检查来实现缓冲区的保护。这个方法使得缓冲区溢出不可能出现,从而完全消除了缓冲区溢出的威胁,但是相对而言代价比较大。
一种间接的方法,这个方法在程序指针失效前进行完整性检查。虽然这种方法不能使得所有的缓冲区溢出失效,但它能阻止绝大多数的缓冲区溢出攻击。分析这种保护方法的兼容性和性能优势。